日拱一卒,功不唐捐
Google SRE 学习笔记

Why:为什么

What:是什么

How:怎么做

数据库学习笔记

前置

  1. Why:为什么需要 DBMS? 文件已经可以保存数据,但当应用需要共享、查询和修改这些数据时,还需要解决下面的问题:

    问题 没有 DBMS 时,应用需要自己处理什么?
    数据完整性 阻止年份被写成无效字符串;避免同一艺人的信息互相矛盾;处理删除艺人后的引用
    数据建模 怎样表达“一张专辑有多位艺人,一位艺人有多张专辑”?
    数据访问与共享 自己解析文件、查找记录、修改记录;多个应用还可能重复实现这些逻辑
    并发访问 两个线程同时修改数据时,避免修改互相覆盖
    崩溃与可靠性 更新到一半机器崩溃,怎样恢复?已经报告保存成功的数据,怎样保证重启后仍然存在?
    存储方式变化 文件格式、数据布局或访问方式改变时,怎样减少对业务代码的影响?
  2. What?:什么是 DBMS? DBMS 是管理数据库的软件,为应用提供定义、创建、查询、修改和管理数据的能力。

    概念 含义 例子
    数据库 Database 被组织、保存的数据集合 学生、课程、选课记录
    数据模型 Data Model 描述数据如何组织、受什么约束、支持哪些操作的概念体系 关系模型、文档模型、键值模型
    数据库管理系统 DBMS 按某种数据模型管理数据的软件 MySQL、PostgreSQL
  3. How:DBMS 怎样组织和操作数据? 第一讲主要从逻辑设计层面回答,以关系模型为例,分成三个方面:

    方面 解决的问题 对应我们的练习
    结构 Structure 数据长什么样? 用 student、course、enrolled 三个关系组织数据;每行是元组,每列是属性,属性有取值域
    完整性 Integrity 什么样的数据才合法? 主键唯一标识记录;外键保证引用有效;其他约束规定非空、取值范围等
    操作 Manipulation 可以怎样查询和修改数据? 选择、投影、并集、交集、差集、笛卡尔积、连接等关系运算

基础概念

  1. 关系数据模型三大概念:

    1. 结构(Structure): 定义关系及其内容,而不依赖它们的物理表示。每个关系都有一组属性,每个属性都有一个取值域(Domain)。
    2. 完整性(Integrity): 保证数据库内容满足特定约束。例如,一个人的年龄不能是负数。
    3. 操作(Manipulation): 提供声明式 API,通过关系,也就是集合,来访问和修改数据库内容。程序员只需指定期望的结果;数据库系统决定执行查询时最有效的计划;
  2. 结构:定义数据如何组织表示

    概念 定义 示例
    关系 Relation 元组组成的无序集合,用来表达一类事实;通常可以对应为一张表 student 表
    元组 Tuple 关系中的一条记录,由各个属性对应的值组成 (1, '张三', 20)
    属性 Attribute 描述数据的一个字段,通常对应表中的一列 sid、name、age
    取值域 Domain 某个属性允许取值的集合或类型范围 age 的值采用整数类型
    n 元关系 n-ary Relation 具有 n 个属性的关系 student(sid, name, age) 是三元关系
    关系模式 Relation Schema 对关系名称、属性及其取值域等结构的定义 定义 student 有哪些列、各列是什么类型
  3. 完整性:规定什么样的数据状态是合法的。

    约束 作用 示例
    主键 Primary Key 唯一标识关系中的一个元组;主键值必须唯一且非 NULL student.sid
    外键 Foreign Key 约束记录之间的引用,保证参照完整性 enrolled.sid 引用 student.sid
    唯一约束 UNIQUE 要求指定属性或属性组合的值具有唯一性;NULL 的处理依数据库规则而定 student.login
    非空约束 NOT NULL 要求属性必须有值,不能为 NULL course.name
    检查约束 CHECK 要求属性值或一条记录满足指定条件 CHECK (age >= 0)
  4. 数据操纵语言(Data Manipulation Languages,DML):

    1. 声明式;(只表明结果,不表明过程)

      1
      2
      3
      4
      SELECT:查询
      INSERT:插入
      UPDATE:修改
      DELETE:删除
    2. 关系代数:定义了关系上的基本运算。每个运算接收一个或多个关系作为输入,输出一个新的关系;

      运算 定义与作用 记法
      选择 Selection 保留满足条件的元组,即筛选行 σ条件(R)
      投影 Projection 保留指定属性,即选择列;经典关系代数会去除重复结果 π属性列表(R)
      并集 Union 返回至少出现在一个输入关系中的元组 R ∪ S
      交集 Intersection 返回同时出现在两个输入关系中的元组 R ∩ S
      差集 Difference 返回出现在 R 中、但没有出现在 S 中的元组 R − S
      笛卡尔积 Cartesian Product 将两个输入关系的元组全部两两组合 R × S
      连接 Join 按匹配规则组合两个关系中的元组 R ⋈ S 或带条件的连接记法

lecture 02

  1. 查看表结构

    1
    2
    3
    SHOW TABLES;
    DESCRIBE student;
    SELECT * FROM course;
  2. 基础查询

    1
    2
    3
    4
    5
    6
    7
    8
    SELECT ...
    FROM ...
    JOIN ... ON ...
    WHERE ...
    GROUP BY ...
    HAVING ...
    ORDER BY ...
    LIMIT ...;
    需求 写法
    等于、不等于 =、<>,不等于也可以用 !=
    同时满足、满足任意一个 AND、OR
    值为空、不为空 IS NULL、IS NOT NULL
    字符串模式匹配 LIKE
    任意长度的字符,包括零个 %
    恰好一个字符 _
    属于、不属于某个结果集合 IN、NOT IN
  3. 聚合与NULL:统计“行数”还是“有值的数量”

    表达式 含义 本轮学生表的结果
    COUNT(*) 统计行数 6
    COUNT(gpa) 统计 GPA 非 NULL 的行数 5
    AVG(gpa) 对非 NULL 的 GPA 求平均 3.50
    MAX(gpa) 最大的非 NULL GPA 3.90
    MIN(gpa) 最小的非 NULL GPA 2.80
  4. JOIN:连接方向、匹配条件与计数列;

    写法 结果含义
    CROSS JOIN 两边记录的所有组合
    JOIN ... ON ... 保留满足连接条件的组合
    LEFT JOIN ... ON ... 保留匹配结果,也保留未匹配的左表行,右侧字段补 NULL
  5. 子查询:区分“一个值”“一组值”“有没有行”

    用法 子查询提供什么
    gpa > (SELECT AVG(...)) 一个值,用于比较
    sid IN (SELECT sid ...) 一组值,用于判断归属
    EXISTS (SELECT ...) 判断是否至少返回一行
    FROM (SELECT ...) AS t 一张结果表,供外层继续查询
  6. CTE 与窗口函数:保留明细,再计算排名

    1
    2
    3
    4
    5
    WITH result_name AS (
    SELECT ...
    )
    SELECT ...
    FROM result_name;
    对比 GROUP BY 聚合 窗口中的 PARTITION BY
    每行代表什么 一个组 一条原始明细
    是否保留个人记录 汇总成每组一行 保留
    典型需求 每门课程有多少人 每个学生在课程中的名次
软件设计的哲学
这本书就是关于如何使用复杂性来指导软件设计的整个生命周期。 日期 学习内容 主题 印象最深刻的金句/观点/知识点等 你有哪些思考&#...
Maglev 论文阅读笔记:高性能转发、一致性哈希与连接亲和性
从生产问题出发,整理 Maglev 的软件负载均衡架构、转发优化、一致性哈希、连接跟踪及故障恢复边界。
TGW 论文阅读笔记:高性能转发、状态迁移与故障恢复
从游戏和直播的网关低时延、低抖动、低丢包需求出发,整理 TGW 的报文处理、在线状态迁移、故障恢复与定位机制,以及连接状态和业务恢复的边界。
DPDK vs 内核协议栈
简要对比 DPDK 与内核协议栈的开销、优化手段,以及 NAPI 与轮询收包的区别。
我的第一篇博客
描述我创办这个博客的理由
Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

© 2025–2026 Zhe-MingC
Powered by hexo | Theme is dewjo